package xin.qixia.client.controller;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import xin.qixia.client.service.IRobotService;
import xin.qixia.common.web.controller.BaseController;
import xin.qixia.common.web.domain.R;
import xin.qixia.robot.core.domain.Robot;

import java.util.List;

/**
 * 机器人
 *
 * @author wangkaixin
 * @date 2025/5/23 10:48
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/robot")
public class RobotController extends BaseController {

    private final IRobotService service;

    /**
     * 查询机器人列表
     */
    @GetMapping("/list")
    public R<List<Robot>> list(Robot bo) {
        return R.ok(service.queryList(bo));
    }

    /**
     * 获取机器人详细信息
     *
     * @param account 主键
     */
    @GetMapping("/{account}")
    public R<Robot> getInfo(@NotNull(message = "主键不能为空")
                            @PathVariable String account) {
        return R.ok(service.queryById(account));
    }

    /**
     * 修改机器人
     *
     * @param robot
     * @return
     */
    @PostMapping
    public R<Void> save(@Validated @RequestBody Robot robot) {
        return toAjax(service.save(robot));
    }

    /**
     * 启用机器人
     *
     * @param account
     * @return
     */
    @PutMapping("/enable")
    public R<Void> enable(@NotNull(message = "机器人账号不能为空") String account) {
        return toAjax(service.enable(account));
    }

    /**
     * 停用机器人
     *
     * @param account
     * @return
     */
    @PutMapping("/disable")
    public R<Void> disable(@NotNull(message = "机器人账号不能为空") String account) {
        return toAjax(service.disable(account));
    }

    /**
     * 删除机器人
     *
     * @param accountList 主键串
     */
    @DeleteMapping("/{accountList}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable String[] accountList) {
        return toAjax(service.deleteWithValidByIds(List.of(accountList), true));
    }
}
